java
design parttern
单例模式
单例模式主要作用是保证java应用程序中,一个类只有一个实例存在
主要解决:一个全局使用的类频繁地创建和销毁
何时使用: 当我想控制实例的数目,节省系统资源的时候
关键代码:构造函数是私有的
应用实例:一些设备管理器常常用单例模式,比如一个电脑有两台打印机, 在输出的时候就要处理不能两台打印机打印同一个文件
public class SingleObject {
//创建 SingleObject 的一个对象
private static SingleObject instance = new SingleObject();
//让构造函数为 private,这样该类就不会被实例化
private SingleObject(){}
//获取唯一可用的对象
public static SingleObject getInstance(){
return instance;
}
public void showMessage(){
System.out.println("Hello World!");
}
}
工厂模式
主要解决: 主要解决接口选择的问题
何时使用: 系统的产品有多于一个的产品族, 而系统只消费其中某一族的产品
如何解决: 在一个产品族里面, 定义多个产品
- step 1 为形状创建一个接口
public interface Shape{
void draw();
}
- step 2 创建实现接口的实体类
Rectangle.java
public class Rectangle implements Shape{
@Override
public void draw() {
System.out.println("Inside Rectangle : draw() method.");
}
}
Square.java
public class Square implements Shape{
@Override
public void draw() {
System.out.println() ;
}
}
Circle.java
public class Square implements Shape {
@Override
public void draw() {
System.out.println();
}
}
- step 3 为颜色创建一个接口
public interface Color {
void fill();
}
- step 4 创建实现接口的实体类
Red.java
public class Red implements Color {
@Override
public void fill() {
System.out.println();
}
}
Green.java
public class Green implements Color {
@Override
public void fill() {
System.out.println();
}
}
Blue.java
public class Blue implements Color{
@Override
public void fill() {
System.out.println();
}
}
- step 5
为Color和Shape 对象创建抽象类来获取工厂 AbstractFactory.java
public abstract class AbstractFactory{
abstract Color getColor(String color);
abstract Shape getShape(String shape);
}
- step 6
ShapeFactory.java
public class ShapeFactory extends AbstractFactory{
@Override
public Shape getShape(String shapeType) {
if(shapeType == null) {
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle(); // 因为circle是一个类,实现了shape接口,所以可以实例化返回
}else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
}else if(shapeType.equalsIgnoreCase("SQUARE")) {
return new Square();
}
return null;
}
@Override
Color getColor(String color) {
return null;
}
}
ColorFactory.java
public class ColorFactory extends AbstractFactory{
@Override
public Shape getShapes(String shapeType){
return null;
}
@Override
Color getColor(String color) {
}
@Override
Color getColor(String color) {
if(color == null) {
return null;
}
if(color.equalsIgnoreCase("GREEN")) {
return new Green();
}else if(color.equalsIgnoreCase("BLUE")) {
return new Blue();
}
return null;
}
}